package wodegua.d29_多线程;

import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 假如，我是说假如我又要线程安全又要同时执行，请问阁下准备如何应对
 *
 * 目标:拓展悲观锁，乐观锁原理。
 * 悲观锁:一上来就加锁，没有安全感。每次只能一个线程进入访问完毕后，再解锁。
 * 乐观锁:一开始不上锁，认为是没有问题的，大家一起跑，等要出现线程安全问题的时候才开始控制。线程安全，性能较好。
 */
public class d10_ThreadTz {
    public static void main(String[] args) {
        MyRunnable2 r = new MyRunnable2();

        for (int i = 1; i <= 100; i++) {
            new Thread(r).start();
        }
    }
}

class MyRunnable2 implements Runnable{
    //整数修改的乐观锁:原子类实现的。
//    private int count;
    private final AtomicInteger count = new AtomicInteger();
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            //悲观锁
//            synchronized (this) {
//                System.out.println(Thread.currentThread().getName() + " => "+ (++count));
//            }
            System.out.println(Thread.currentThread().getName() + " => "+ count.incrementAndGet());
        }
    }
}
